package UDP;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 言初
 * Date: 2024-02-06
 * Time: 17:09
 */

import java.io.IOException;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;


// 客户端

public class test {

    private DatagramSocket socket = null;
    private String SeverIP; // ip地址
    private int SeverPort; // 端口号

    // 客户端 这一端 不需要显式指定端口号，系统会自动给它分配一个空闲的端口号
    public test(String IP, int port) throws SocketException {
        socket=new DatagramSocket();
        SeverIP = IP;
        SeverPort = port;
    }

    public void start () throws IOException {
        Scanner sc=new Scanner(System.in);
        while(true){
            System.out.printf("-> ");

            // 用户输入
            String request=sc.next();
            // 把输入的字符串变成DatagramPacket 类型
            DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),request.getBytes().length,
                    InetAddress.getByName(SeverIP),SeverPort);
            // 客户端发送 请求 给服务器
            socket.send(requestPacket);

            DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096);
            // 客户端接收 服务器返回的 响应
            socket.receive(responsePacket);

            // 把接收到的响应 转为字符串类型，方便观察（不是必要的一步操作）
            String response =new String(responsePacket.getData(),0, responsePacket.getLength());

            // 打印请求和响应的结果数据
            System.out.printf("req: %s, resp: %s\n", request, response);

        }
    }

    // 主函数
    public static void main(String[] args) throws IOException {
        // 127.0.0.1 代表这个客户端是给 本机的 一个服务器 发送的请求
        // 9090 代表端口号， 客户端的端口号 要与 服务器的端口号 相匹配。
        test client = new test("127.0.0.1",9090);
        client.start();
    }
}

